package com.gitee.zycra.union.api.service;

import com.gitee.zycra.jdbc.model.PageResult;
import com.gitee.zycra.union.api.common.bo.CommonResult;
import com.gitee.zycra.union.api.common.bo.PageQuery;
import com.gitee.zycra.union.api.common.param.PageQueryMockTemplateParam;
import com.gitee.zycra.union.api.common.vo.MockInterfaceVO;
import com.gitee.zycra.union.api.common.vo.MockTemplateInterfaceVO;
import com.gitee.zycra.union.api.common.vo.MockTemplateVO;
import com.gitee.zycra.union.api.manager.ApiMockTemplateInterfaceManager;
import com.gitee.zycra.union.api.manager.ApiMockTemplateManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zycra
 */
@Slf4j
@Service
public class ApiMockTemplateService {

    @Autowired
    private ApiMockTemplateManager apiMockTemplateManager;

    @Autowired
    private ApiMockTemplateInterfaceManager apiMockTemplateInterfaceManager;

    /**
     * 添加mock模板
     *
     * @param groupId      项目组ID
     * @param templateName 模板名称
     * @return 添加结果
     */
    public CommonResult<String> addMockTemplate(Long groupId, String templateName) {
        apiMockTemplateManager.addMockTemplate(groupId, templateName);
        return CommonResult.success();
    }

    /**
     * 更新mock模板
     *
     * @param id           模板ID
     * @param templateName 模板名称
     * @return 更新结果
     */
    public CommonResult<String> updateMockTemplate(Long id, String templateName) {
        apiMockTemplateManager.updateMockTemplate(id, templateName);
        return CommonResult.success();
    }

    /**
     * 删除mock模板
     *
     * @param id 模板ID
     * @return 删除结果
     */
    public CommonResult<String> deleteMockTemplate(Long id) {
        apiMockTemplateManager.deleteMockTemplate(id);
        return CommonResult.success();
    }

    /**
     * 查询mock模板
     *
     * @param pageQuery 查询参数
     * @return 查询结果
     */
    public CommonResult<PageResult<MockTemplateVO>> selectMockTemplateForPage(PageQuery<PageQueryMockTemplateParam> pageQuery) {
        return CommonResult.success(apiMockTemplateManager.selectMockTemplateForPage(pageQuery));
    }

    /**
     * 添加mock模板接口
     *
     * @param templateId  模板ID
     * @param interfaceId 接口ID
     * @return 添加结果
     */
    public CommonResult<String> addMockTemplateInterface(Long templateId, Long interfaceId) {
        apiMockTemplateInterfaceManager.addMockTemplateInterface(templateId, interfaceId);
        return CommonResult.success();
    }

    /**
     * 删除mock模板接口
     *
     * @param id 模板接口ID
     * @return 删除结果
     */
    public CommonResult<String> deleteMockTemplateInterface(Long id) {
        apiMockTemplateInterfaceManager.deleteMockTemplateInterface(id);
        return CommonResult.success();
    }

    /**
     * 根据模板ID查询接口
     *
     * @param templateId 模板ID
     * @return 查询结果
     */
    public CommonResult<List<MockTemplateInterfaceVO>> selectMockTemplateInterfaceByTemplateId(Long templateId) {
        return CommonResult.success(apiMockTemplateInterfaceManager.selectByTemplateId(templateId));
    }

    /**
     * 根据模板ID查询接口和期望信息
     *
     * @param templateId 模板ID
     * @return 查询结果
     */
    public CommonResult<List<MockInterfaceVO>> selectByTemplateIdForAdd(Long templateId) {
        return CommonResult.success(apiMockTemplateInterfaceManager.selectByTemplateIdForAdd(templateId));
    }
}
